#include <iostream>
#include <string>
#include <algorithm> 
using namespace std;

struct sbuj{
	string name;
	int d,t;
};
int cmp(sbuj a,sbuj b){
	if( a.d!=b.d )
		return a.d<b.d;
	else return a.t<b.t; 
}
int MinDelete(sbuj s[],int k){
	int present=0,sum=0;
	for( int i=0; i<k; i++ ){
		if( present+s[i].t>s[i].d ){
			present+=s[i].t;
			sum+=present-s[i].d;
		}else{
			present+=s[i].t;
		}
	}
	return sum;
}
void output(sbuj s[],int k){
	if( s[0].d==s[1].d&&s[1].d==s[1].t&&s[0].name>s[1].name ){
		string tmps=s[0].name;
		int tmp=s[0].t;
		s[0].t=s[1].t;s[0].name=s[1].name;
		s[1].t=tmp;s[1].name=tmps;
	}
	for( int i=0; i<k; i++ ){
		cout<<s[i].name<<endl;
	}
}
int main(){
	int n,k;
	cin>>n;
	while( n-- ){
		cin>>k;
		sbuj s[k];
		for( int i=0; i<k; i++ ){
			cin>>s[i].name>>s[i].d>>s[i].t;
		}
		sort(s,s+k,cmp);
		cout<<MinDelete(s,k)<<endl;
		output(s,k);
	}
	return 0;
} 
